package logica_de_presentacion;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;

import logica_de_negocio.ExcepDeleteOnCascade;
import logica_de_negocio.FaltanDatosEnLaBaseDeDatos;
import logica_de_negocio.gestorPeli;

public class FormularioBorrarPeliculaPorTitulo extends JInternalFrame implements
		ActionListener, InternalFrameListener {

	private static final long serialVersionUID = 1L;
	protected JComboBox<String> jcTitulo;
	protected JButton borrar, cancelar;
	private MenuInicial clasePadre;
	private FormularioDirectorDePeliculaPorTitulo formularioDirectorDePeliculaPorTitulo;
	private String director, titulo;

	public FormularioBorrarPeliculaPorTitulo(MenuInicial clasePadre)
			throws ClassNotFoundException {

		super("Buscar Pelicula por titulo", true, true, true, true);
		this.setVisible(true);
		this.getContentPane().setLayout(new BorderLayout());
		this.clasePadre = clasePadre;
		JPanel pBotones = new JPanel();

		// BORRAR
		ImageIcon imagenBorrar = createImageIcon("/logica_de_presentacion/imagenes/BORRAR.gif");
		borrar = new JButton("Borrar", imagenBorrar);
		borrar.addActionListener(this);
		pBotones.add(borrar);

		// CANCELAR
		ImageIcon imagenCancelar = createImageIcon("/logica_de_presentacion/imagenes/CANCELAR.gif");
		cancelar = new JButton("Cancelar", imagenCancelar);
		cancelar.addActionListener(this);
		pBotones.add(cancelar, "South");

		// BOTONES
		this.getContentPane().add(pBotones, BorderLayout.SOUTH);
		gestorPeli gp = new gestorPeli();
		jcTitulo = new JComboBox<String>(gp.getTitulo());

		this.getContentPane().add(jcTitulo, BorderLayout.CENTER);
		JLabel jl = new JLabel("Indique el titulo de la pelicula a borrar");
		this.getContentPane().add(jl, BorderLayout.NORTH);

		this.pack();

	}

	@Override
	public void actionPerformed(ActionEvent e) {

		JButton BotonPulsado = (JButton) e.getSource();

		if (BotonPulsado == cancelar) {
			this.dispose();
		}
		if (BotonPulsado == borrar) {
			titulo = (String) jcTitulo.getSelectedItem();
			try {
				borrar();
			} catch (ClassNotFoundException e1) {
				JOptionPane.showMessageDialog(new Frame(),
						"No hay informacion en la base de datos");
				this.dispose();
			}
			this.dispose();
		}
	}

	private void borrar() throws ClassNotFoundException {

		formularioDirectorDePeliculaPorTitulo = new FormularioDirectorDePeliculaPorTitulo(
				titulo);
		formularioDirectorDePeliculaPorTitulo.addInternalFrameListener(this);
		try {
			formularioDirectorDePeliculaPorTitulo.setSelected(true);
		} catch (PropertyVetoException e) {
		}
		clasePadre.add(formularioDirectorDePeliculaPorTitulo);
	}

	/** Returns an ImageIcon, or null if the path was invalid. */
	protected static ImageIcon createImageIcon(String path) // ICONO
	{
		java.net.URL imgURL = Button.class.getResource(path);
		if (imgURL != null) {
			return new ImageIcon(imgURL);
		} else {
			System.err.println("Couldn't find file: " + path);
			return null;
		}
	}

	@Override
	public void internalFrameOpened(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameClosing(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameClosed(InternalFrameEvent e) {

		if (e.getSource() == formularioDirectorDePeliculaPorTitulo) {
			director = formularioDirectorDePeliculaPorTitulo.getSelDirec();

			if (titulo != null) {
				if (director != null) {
					boolean borrado = false;
					gestorPeli gp = new gestorPeli();
					int id_p = 0;
					try {
						id_p = gp.getId(titulo, director);// SOLO NOS INTERESA
															// EL ID PARA BORRAR

						borrado = gp.borrar(id_p, new ExcepDeleteOnCascade());
					} catch (ExcepDeleteOnCascade e1) {
						int res = JOptionPane
								.showConfirmDialog(
										new Frame(),
										"Al eliminar la pelicula tambien se eliminaran los comentarios de los usuarios y estos dejaran de seguir la pelicula");
						// YES=0, NO=1,Cancel =2
						if (res == 0) {
							e1.setAceptado(true);
							try {
								borrado = gp.borrar(id_p, e1);
							} catch (ExcepDeleteOnCascade e2) {
							} catch (ClassNotFoundException e2) {
								JOptionPane
										.showMessageDialog(new Frame(),
												"No hay informacion en la base de datos");
								this.dispose();
							}
						}
					} catch (FaltanDatosEnLaBaseDeDatos e1) {
						JOptionPane.showMessageDialog(new Frame(),
								e1.getFalta());
					} catch (ClassNotFoundException e1) {
						JOptionPane.showMessageDialog(new Frame(),
								"No hay informacion en la base de datos");
						this.dispose();
					}

					if (borrado) {
						JOptionPane.showMessageDialog(new Frame(),
								"Se ha borrado");
					} else {
						JOptionPane.showMessageDialog(new Frame(),
								"NO se ha borrado");
					}
				}
			}
		}
	}

	@Override
	public void internalFrameIconified(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameDeiconified(InternalFrameEvent e) {

	}

	@Override
	public void internalFrameActivated(InternalFrameEvent e) {

	}

	@Override
	public void internalFrameDeactivated(InternalFrameEvent e) {

	}
}
